<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
/* // 对象的key只能是字符串，如果不是字符串，自动转成字符串
var obj = {a:3,b:4};
var a = {x:1};
var b = {y:2};
// obj[a] -> obj[{x:1}] -> obj[{x:1}.toSting()] -> obj['[object Object]'] = '张三'
obj[a] = '张三';
// obj[b] -> obj[{y:2}] -> obj[{y:2}.toSting()] -> obj['[object Object]'] = '李四'
obj[b] = '李四';
console.log( obj[a] );// '李四'
console.log( obj[b] );// '李四' */


// 请说说 a.b 可能出现哪些情况？
// 1.如果a未定义，报引用错误
// 2.如果a是number string boolean object array function，返回b的值或undefined
// 3.如果a是null或undefined，报类型错误


// 正常模式下，在函数内部，形参和arguments相互追踪各自的变化 2 3 1
// 'use strict' 严格模式下，形参和arguments不会相互追踪各自的变化 1 2 1


// 严格模式通过在脚本或函数的头部添加 use strict; 表达式来声明。
'use strict';
var x = 1;
function fn(x){// 形参初始值 x = 1
    x = 2;// 修改形参的值为2
    console.log( arguments[0] );// 2  1
    arguments[0] = 3;// 修改实参副本对象中的值
    console.log( x );// 3  2
}
fn(x);// fn(1)
console.log( x );// 1  1

</script>
</body>
</html>